package com.ly.common.filter;

import com.ly.common.utils.http.HttpHelper;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;


/**
 * 构建可重复读取inputStream的request
 * @author ruoyi
 */
public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper {
    private final byte[] body;

    public RepeatedlyRequestWrapper (HttpServletRequest request, ServletResponse response) throws IOException {
        super ( request );
        request.setCharacterEncoding ( "UTF-8" );
        response.setCharacterEncoding ( "UTF-8" );

        body = HttpHelper.getBodyString ( request ).getBytes ( "UTF-8" );
    }

    @Override
    public BufferedReader getReader () throws IOException {
        return new BufferedReader ( new InputStreamReader ( getInputStream () ) );
    }

    @Override
    public ServletInputStream getInputStream () throws IOException {

        final ByteArrayInputStream bais = new ByteArrayInputStream ( body );

        return new ServletInputStream () {

            @Override
            public int read () throws IOException {
                return bais.read ();
            }

            @Override
            public boolean isFinished () {
                return false;
            }

            @Override
            public boolean isReady () {
                return false;
            }

            @Override
            public void setReadListener (ReadListener readListener) {

            }
        };
    }
}
